package cn.tedu.eb_film.service;

import cn.tedu.eb_film.pojo.dto.CinemaScheduleAddNewDTO;
import cn.tedu.eb_film.pojo.dto.CinemaScheduleEditDTO;
import cn.tedu.eb_film.pojo.dto.CinemaScheduleUpdateInfoDTO;
import cn.tedu.eb_film.pojo.dto.CinemaUpdateDTO;
import cn.tedu.eb_film.pojo.vo.*;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 场次服务类
 *
 * @author zhongcongwen
 * @since 2023/3/21 19:37
 */
public interface CinemaScheduleService {

    String ENABLE_TEXT[] = {"禁用","启用"};
    String DISPLAY_TEXT[] = {"展示","隐藏"};

    void setEnable(Long id);
    void setDisable(Long id);
    /**
     * 添加场次
     *
     * @param CinemaScheduleAddNewDTO  场次数据传输实体类
     */
    @Transactional(rollbackFor = Exception.class)
    void addNew(CinemaScheduleAddNewDTO CinemaScheduleAddNewDTO);

    /**
     * 批量新增场次信息
     *
     * @param CinemaScheduleAddNewDTOS 场次集合
     */
    @Transactional(rollbackFor = Exception.class)
    void addNews(List<CinemaScheduleAddNewDTO> CinemaScheduleAddNewDTOS);

    /**
     * 根据id删除数据
     *
     * @param id 需要删除的数据
     */
    @Transactional(rollbackFor = Exception.class)
    void deleteById(Long id);

    /**
     * 根据id批量删除数据
     *
     * @param id 需要删除的数据id集合
     */
    @Transactional(rollbackFor = Exception.class)
    void deleteByIds(List<Long> id);

    /**
     * 统计表内总数量
     *
     * @return 总数量
     */
    Long count();

    /**
     * 根据id查询场次数据
     *
     * @param id 查询的id
     * @return  返回场次视图
     */
    CinemaScheduleStandardVO getCinemaScheduleById(Long id);

    /**
     * 查询场次所有数据
     *
     * @return  场次集合
     */
    List<CinemaScheduleListItemVO> list();

    /**
     * 编辑修改场次
     *
     * @param cinemaSchedule 修改后的数据
     */
    @Transactional(rollbackFor = Exception.class)
    void update(CinemaScheduleUpdateInfoDTO cinemaSchedule);
    /**
     * 根据影厅id查询下属影厅
     * @param cinemaHallId
     * @return
     */
    List<CinemaScheduleListItemVO> listByCinemaHallId(Long cinemaHallId,Integer state);

    /**
     * 修改场次
     * @param cinemaScheduleEditDTO
     */
    void editSchedule(CinemaScheduleEditDTO cinemaScheduleEditDTO);
}
